跳到主要内容

Julia 函数

阐述

函数接受一定的输入并返回一定的输出。一个函数可以包括多个不同的 Julia 方法。可以用块形式和赋值形式定义。函数调用为传地址调用。

函数在第一个方法被定义时创建,或者也可以定义一个不包含任何方法的函数:

function emptyfunc end

每个在顶层定义的函数都有与之对应的一个 Julia 单例类型,且这个类型是 Function 的子类型。但是匿名函数不一定是单例类型。

函数类型的单例化使得高阶函数可以轻易地对作为参数的函数特化,编译出高效的代码。

julia> foo41(x) = x + 1
foo41 (generic function with 1 method)

julia> typeof(foo41)
typeof(foo41) (singleton type of function foo41, subtype of Function)

参数

函子

任何 Julia 对象都可以通过添加调用方法的方式来让它变得可以调用。

julia> struct Polynomial{R}
coeffs::Vector{R}
end

julia> function (p::Polynomial)(x)
v = p.coeffs[end]
for i = (length(p.coeffs)-1):-1:1
v = v*x + p.coeffs[i]
end
return v
end

在 Julia 内部,普通的函数也是通过(无字段的)函子来实现的,所以二者本质上是一样的。

实例

定义

function f(x, y)
x + y
end
f(x, y) = x + y
f = x -> x + 1

性质

两种不同的组合函数的方式

复合运算符(从右向左运算)

(sqrt ∘ +)(3, 6)

管线运算符(从左向右运算)

1:10 |> sum |> sqrt

相关内容

参考文献